package com.zx.auth.block.repository.custom;

import com.zx.auth.block.modle.OAuth2Authorization;
import com.zx.auth.block.param.OAuth2AuthorizationParam;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * <p>
 * description: OAuth2授权自定义仓库接口 <br>
 * create: 2025-11-13 10:30
 * </p>
 *
 * @author
 */
public interface OAuth2AuthorizationCustomRepository {
    /**
     * 根据条件分页查询授权
     *
     * @param authorizationParam 查询条件
     * @param pageable           分页对象
     * @param tenantId           租户ID
     * @return 授权分页结果
     */
    Page<OAuth2Authorization> findAuthorizationsByPage(OAuth2AuthorizationParam authorizationParam, Pageable pageable, String tenantId);

    /**
     * 根据注册客户端ID和租户ID查找授权
     *
     * @param registeredClientId 注册客户端ID
     * @param tenantId           租户ID
     * @return 授权列表
     */
    List<OAuth2Authorization> findByRegisteredClientIdAndTenantId(String registeredClientId, String tenantId);

    /**
     * 根据状态和租户ID查找授权
     *
     * @param state    状态
     * @param tenantId 租户ID
     * @return 授权列表
     */
    List<OAuth2Authorization> findByStateAndTenantId(String state, String tenantId);

    /**
     * 根据授权码和租户ID查找授权
     *
     * @param authorizationCode 授权码
     * @param tenantId          租户ID
     * @return 授权列表
     */
    List<OAuth2Authorization> findByAuthorizationCodeAndTenantId(String authorizationCode, String tenantId);

    /**
     * 根据访问令牌和租户ID查找授权
     *
     * @param accessToken 访问令牌
     * @param tenantId    租户ID
     * @return 授权列表
     */
    List<OAuth2Authorization> findByAccessTokenAndTenantId(String accessToken, String tenantId);

    /**
     * 根据刷新令牌和租户ID查找授权
     *
     * @param refreshToken 刷新令牌
     * @param tenantId     租户ID
     * @return 授权列表
     */
    List<OAuth2Authorization> findByRefreshTokenAndTenantId(String refreshToken, String tenantId);
}